home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / dflat_r_.arc / SYSMENU.C < prev    next >
Text File  |  1991-10-02  |  3KB  |  97 lines

  1. /* ------------- sysmenu.c ------------ */
  2.  
  3. #include <stdio.h>
  4. #include <dos.h>
  5. #include "dflat.h"
  6.  
  7. #ifdef INCLUDE_SYSTEM_MENUS
  8.  
  9. int SystemMenuProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  10. {
  11.     int mx, my;
  12.     WINDOW wnd1;
  13.     switch (msg)    {
  14.         case CREATE_WINDOW:
  15.             wnd->holdmenu = ActiveMenuBar;
  16.             ActiveMenuBar = &SystemMenu;
  17.             SystemMenu.PullDown[0].Selection = 0;
  18.             break;
  19.         case LEFT_BUTTON:
  20.             wnd1 = GetParent(wnd);
  21.             mx = (int) p1 - GetLeft(wnd1);
  22.             my = (int) p2 - GetTop(wnd1);
  23.             if (HitControlBox(wnd1, mx, my))
  24.                 return TRUE;
  25.             break;
  26.         case LB_CHOOSE:
  27.             PostMessage(wnd, CLOSE_WINDOW, 0, 0);
  28.             break;
  29.         case DOUBLE_CLICK:
  30.             if (p2 == GetTop(GetParent(wnd)))    {
  31.                 PostMessage(GetParent(wnd), msg, p1, p2);
  32.                 SendMessage(wnd, CLOSE_WINDOW, TRUE, 0);
  33.             }
  34.             return TRUE;
  35.         case SHIFT_CHANGED:
  36.             return TRUE;
  37.         case CLOSE_WINDOW:
  38.             ActiveMenuBar = wnd->holdmenu;
  39.             break;
  40.         default:
  41.             break;
  42.     }
  43.     return DefaultWndProc(wnd, msg, p1, p2);
  44. }
  45.  
  46. void BuildSystemMenu(WINDOW wnd)
  47. {
  48.     int lf = GetLeft(wnd)+1;
  49.     int tp = GetTop(wnd)+1;
  50.     int ht = MenuHeight(SystemMenu.PullDown[0].Selections);
  51.     int wd = MenuWidth(SystemMenu.PullDown[0].Selections);
  52.     WINDOW SystemMenuWnd;
  53.  
  54.     SystemMenu.PullDown[0].Selections[6].Accelerator = 
  55.         (GetClass(wnd) == APPLICATION) ? ALT_F4 : CTRL_F4;
  56.  
  57.     if (lf+wd > SCREENWIDTH-1)
  58.         lf = (SCREENWIDTH-1) - wd;
  59.     if (tp+ht > SCREENHEIGHT-2)
  60.         tp = (SCREENHEIGHT-2) - ht;
  61.  
  62.     SystemMenuWnd = CreateWindow(POPDOWNMENU, NULL,
  63.                     lf,    tp,    ht,    wd,    NULL, wnd, SystemMenuProc, 0);
  64.  
  65.     if (wnd->condition == ISRESTORED)
  66.         DeactivateCommand(&SystemMenu, ID_SYSRESTORE);
  67.     else
  68.         ActivateCommand(&SystemMenu, ID_SYSRESTORE);
  69.  
  70.     if (TestAttribute(wnd, MOVEABLE) && wnd->condition != ISMAXIMIZED)
  71.         ActivateCommand(&SystemMenu, ID_SYSMOVE);
  72.     else
  73.         DeactivateCommand(&SystemMenu, ID_SYSMOVE);
  74.  
  75.     if (wnd->condition != ISRESTORED ||    TestAttribute(wnd, SIZEABLE) == FALSE)
  76.         DeactivateCommand(&SystemMenu, ID_SYSSIZE);
  77.     else
  78.         ActivateCommand(&SystemMenu, ID_SYSSIZE);
  79.  
  80.     if (wnd->condition == ISMINIMIZED || TestAttribute(wnd, MINMAXBOX) == FALSE)
  81.         DeactivateCommand(&SystemMenu, ID_SYSMINIMIZE);
  82.     else
  83.         ActivateCommand(&SystemMenu, ID_SYSMINIMIZE);
  84.  
  85.     if (wnd->condition != ISRESTORED ||    TestAttribute(wnd, MINMAXBOX) == FALSE)
  86.         DeactivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
  87.     else
  88.         ActivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
  89.  
  90.     SendMessage(SystemMenuWnd, BUILD_SELECTIONS,
  91.                 (PARAM) &SystemMenu.PullDown[0], 0);
  92.     SendMessage(SystemMenuWnd, SHOW_WINDOW, 0, 0);
  93. }
  94.  
  95. #endif
  96.  
  97.